package pattern.adapter;


public class AdapterDemo {
    public static void main(String[] args){
        OtherInputAdapter adapter = new OtherInputAdapter();
        Toolkit toolkit = new Toolkit(adapter); //完美适配
        toolkit.help();
    }
}


/* 
    一个很方便的工具类，但是要求传入的对象需要符合规范
*/
class Toolkit {

    private Input input;

    public Toolkit(Input input) {
        this.input = input;
    } 

    public void help() {
        //想象一下，除了调用service，Toolkit还能帮助做很多事情
        System.out.println("工具类帮助处理many troubles");
        input.service();
    }
}

//但是，想要使用Toolkit，必须符合Input给定的规范
interface Input {
    void service();
}

//此时，有个不允许修改的第三方类，我们想让他作为输入给Toolkit使用，但是他显然无法修改为Input接口实现类
class OtherInput {
    public void otherService() {
        System.out.println("第三方类的业务方法");
    }
}

//使用适配器类代理这个第三方类，使得他符合规范，但是实质用的还是第三方提供的业务
class OtherInputAdapter implements Input {

    OtherInput otherInput;
    public OtherInputAdapter() {
        this.otherInput = new OtherInput();
    }
    @Override
    public void service() {
        otherInput.otherService();
    }
}